package com.demo.java.OD51_100.OD86;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【数列描述】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145654289
 */
public class OdMain {

    /**
     * solve 方法接收一个整数值，并根据描述的规则生成一个数列。
     * @param values 需要生成数列的迭代次数
     * @return 根据规则生成的数列字符串
     */
    public static String solve(int values) {
        // 初始化数列为 "1"，这是数列的第一个元素
        String tmp = "1";

        // 外层循环控制生成数列的次数
        for (int i = 1; i <= values; i++) {
            // 用来记录当前字符重复的次数
            int index = 0;
            // 用来记录前一个字符，用于对比当前字符
            char preChar = ' ';
            // StringBuilder 用于构建新的数列字符串
            StringBuilder stringBuilder = new StringBuilder();

            // 遍历当前数列中的每个字符
            for (int j = 0; j < tmp.length(); j++) {
                // 如果是数列的第一个字符，直接赋值给 preChar
                if (j == 0) {
                    preChar = tmp.charAt(j);
                }

                // 获取当前字符
                char tem = tmp.charAt(j);

                // 如果当前字符与前一个字符相同，说明是重复的字符，增加重复次数
                if (tem == preChar) {
                    ++index;
                } else {
                    // 如果当前字符与前一个字符不同，说明上一个字符的重复出现次数已经结束
                    // 将之前的字符重复次数和字符本身加入到结果中
                    stringBuilder.append(index).append(preChar);
                    // 重置重复计数为 1，因为当前字符出现一次
                    index = 1;
                    // 更新 preChar 为当前字符
                    preChar = tem;
                }
            }

            // 循环结束后，将最后一个字符及其重复次数加入到结果中
            stringBuilder.append(index).append(preChar);
            // 更新 tmp 为新的数列字符串
            tmp = stringBuilder.toString();
        }
        // 返回生成的数列字符串
        return tmp;
    }

    public static void main(String[] args) {
        try {
            // 使用 Scanner 获取用户输入的整数值
            Scanner s = new Scanner(System.in);
            int values = s.nextInt();
            // 输出根据用户输入值生成的数列
            System.out.println(solve(values));
        } catch (Exception e) {
            // 如果出现异常，打印异常堆栈并输出 "false"
            e.printStackTrace();
            System.out.println("false");
        }
    }
}
